//
//  main.c
//  选择排序
//
//  Created by ws on 2017/7/20.
//  Copyright © 2017年 王松. All rights reserved.
//

#include <stdio.h>
/**
 打印数组
 */
void printArray(int array[],int count)
{
    //  int count  =  sizeof(array) / sizeof(int);
    printf("[");
    for (int i = 0 ; i < count ; i++) {
        //    打印数字
        printf("%d",array[i]);
        //    打印逗号
        if (i != count -1) {
            printf(",");
        }
    }
    printf("]\n");
}

/*
 写一个函数对数组中的元素进行排序
 */



/*
 选择排序
 */
void selectSort(int array[],int count){
    //外层循环控制趟数
    for (int i = 0; i < count - 1; i++) {
        //内层循环选择出最小值放在相应的位置上
        for (int j = i + 1; j < count; j++) {
           //当前面的元素大于后面的元素就交换位置
            if (array[i] > array[j]) {
                int temp = array[i];
                array[i] = array[j];
                array[j] = temp;
            }
        }
    }
}

void selectSort2(int array[],int count)
{
    //  外层循环控制趟
    for (int i = 0; i < count - 1; i++) {
        
        //      定义一个变量来记录需要变为最小值的那个下标
        int min = i;
        //      找出最小值的下标
        for(int j = i + 1;j < count;j++){
            if (array[min] > array[j]) {
                min = j;
            }
        }
        //      如果下标为i的元素不是最小值就交换下位置
        if(i != min){
            int temp = array[i];
            array[i] = array[min];
            array[min] = temp;
        }
        
    }
    
}



int main(int argc, const char * argv[]) {
    //  按升序排序：从小到大
    int nums[5] = {8,6,10,2,1};
    //  计算数组的长度
    int length = sizeof(nums) / sizeof(int);
    printArray(nums, length);
    //    selectSort(nums, length);
    selectSort2(nums, length);
    printArray(nums, length);
    
    return 0;
}

